//package com.empire.module.member.service.datahub;
//
//import com.alibaba.fastjson.JSONObject;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.kafka.core.KafkaTemplate;
//import org.springframework.scheduling.annotation.Scheduled;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.Resource;
//import java.time.LocalDateTime;
//import java.time.format.DateTimeFormatter;
//import java.util.*;
//import java.util.concurrent.ExecutionException;
//
///**
// * 酒店住宿记录Kafka发送模拟器
// */
//@Slf4j
//@Component
//public class HotelRecordDataSender {
//    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//    private static final Random RANDOM = new Random();
//
//    // 酒店住宿数据Kafka主题
//    private static final String HOTEL_RECORD_TOPIC = "datahub-hotel-record-topic";
//
//    @Resource
//    private KafkaTemplate<Object, Object> kafkaTemplate;
//
//    // 身份证号码池
//    private static final List<String> ID_CARD_NUMBERS = Arrays.asList(
//            "440105200910200124",
//            "510101201011211236",
//            "510102201112222347",
//            "500101201201233458",
//            "500102201302244569",
//            "330101201403255670",
//            "330102201504266781",
//            "320101201605277892",
//            "320102201706288903",
//            "120101201807299014",
//            "435231199009123432",
//            "330111199809123425",
//            "330111189709123432"
//    );
//
//    // 护照号码池
//    private static final List<String> PASSPORT_NUMBERS = Arrays.asList(
//            "E12345678", "P98765432", "A13579246", "B24681357", "C35792468",
//            "D46813579", "E57924681", "F68135792", "G79246813", "H81357924",
//            "J92468135", "K14725836", "L25836947", "M36947158", "N47158269",
//            "O58269370", "P69370481", "Q70481592", "R81592603", "C26037148", "C38947148"
//    );
//
//    // 杭州市区域编码与名称映射
//    private static final Map<String, String> AREA_NAMES = new HashMap<String, String>() {{
//        put("330102", "上城区");
//        put("330103", "下城区");
//        put("330104", "江干区");
//        put("330105", "拱墅区");
//        put("330106", "西湖区");
//        put("330108", "滨江区");
//        put("330109", "萧山区");
//        put("330110", "余杭区");
//        put("330111", "富阳区");
//        put("330112", "临安区");
//        put("330122", "桐庐县");
//        put("330127", "淳安县");
//        put("330182", "建德市");
//    }};
//
//    // 酒店品牌
//    private static final String[] HOTEL_BRANDS = {"如家", "汉庭", "全季", "亚朵", "维也纳", "桔子", "布丁", "开元名都", "绿城", "君悦"};
//
//    // 酒店类型
//    private static final String[] HOTEL_TYPES = {"酒店", "大酒店", "精品酒店", "度假酒店", "商务酒店", "快捷酒店"};
//
//    // 道路前缀
//    private static final String[] STREET_PREFIXES = {"东", "南", "西", "北", "中", "复兴", "解放", "延安", "西湖", "钱江"};
//
//    // 道路后缀
//    private static final String[] STREET_SUFFIXES = {"路", "街", "巷", "大道", "胡同", "里"};
//
//    /**
//     * 定时发送模拟酒店住宿数据（每10秒发送一条）
//     */
//    @Scheduled(fixedRate = 10000)
//    public void sendMockHotelRecordData() {
//        // 生成模拟酒店住宿数据
//        Map<String, Object> hotelRecord = generateMockHotelRecord();
//
//        // 发送到Kafka
//        sendKafkaMessage(hotelRecord);
//    }
//
//    /**
//     * 发送消息到Kafka
//     */
//    private void sendKafkaMessage(Map<String, Object> data) {
//        try {
//            kafkaTemplate.send(HOTEL_RECORD_TOPIC, JSONObject.toJSONString(data)).get();
//            log.info("酒店住宿数据发送成功: 姓名={}, 证件号={}, 酒店名称={}",
//                    data.get("check_in_person_name"), data.get("idNumber"), data.get("hotel_name"));
//        } catch (InterruptedException | ExecutionException e) {
//            log.error("[sendKafkaMessage][发送酒店住宿数据失败]", e);
//        }
//    }
//
//    /**
//     * 生成模拟酒店住宿记录
//     */
//    private Map<String, Object> generateMockHotelRecord() {
//        Map<String, Object> record = new HashMap<>();
//
//        // 随机证件类型（1-护照，2-身份证）
//        int idType = RANDOM.nextBoolean() ? 1 : 2;
//        record.put("idType", idType);
//
//        // 根据证件类型选择对应的证件号码
//        if (idType == 1) {
//            record.put("idNumber", PASSPORT_NUMBERS.get(RANDOM.nextInt(PASSPORT_NUMBERS.size())));
//        } else {
//            record.put("idNumber", ID_CARD_NUMBERS.get(RANDOM.nextInt(ID_CARD_NUMBERS.size())));
//        }
//
//        // 酒店名称
//        List<String> areaList = new ArrayList<>(AREA_NAMES.values());
//        String areaName = areaList.get(RANDOM.nextInt(areaList.size()));
//        String hotelName = HOTEL_BRANDS[RANDOM.nextInt(HOTEL_BRANDS.length)] +
//                areaName +
//                HOTEL_TYPES[RANDOM.nextInt(HOTEL_TYPES.length)];
//        record.put("hotel_name", hotelName);
//
//        // 酒店地址
//        String street = STREET_PREFIXES[RANDOM.nextInt(STREET_PREFIXES.length)] +
//                STREET_SUFFIXES[RANDOM.nextInt(STREET_SUFFIXES.length)];
//        int doorNumber = 1 + RANDOM.nextInt(300);
//        String address = "杭州市" + areaName + street + doorNumber + "号";
//        record.put("hotel_address", address);
//
//        // 入住和退房时间
//        LocalDateTime checkInTime = generateRandomCheckInTime();
//        LocalDateTime checkOutTime = checkInTime.plusDays(1 + RANDOM.nextInt(7)); // 入住1-7天
//        record.put("check_in_time", checkInTime.format(DATE_FORMATTER));
//        record.put("check_out_time", checkOutTime.format(DATE_FORMATTER));
//
//        // 房间号
//        record.put("room_no", generateRoomNumber());
//
//        // 入住人姓名
//        record.put("check_in_person_name", generateRandomName());
//
//        // 入住人联系电话
//        record.put("check_in_person_phone", generateRandomPhone());
//
//        // 创建时间
//        record.put("create_time", LocalDateTime.now().format(DATE_FORMATTER));
//
//        return record;
//    }
//
//    /**
//     * 生成随机入住时间（过去7天到未来1天内）
//     */
//    private LocalDateTime generateRandomCheckInTime() {
//        int minDays = -7; // 7天前
//        int maxDays = 1;  // 1天后
//        int daysOffset = minDays + RANDOM.nextInt(maxDays - minDays + 1);
//
//        // 随机小时和分钟
//        int hours = RANDOM.nextInt(24);
//        int minutes = RANDOM.nextInt(60);
//
//        return LocalDateTime.now()
//                .plusDays(daysOffset)
//                .withHour(hours)
//                .withMinute(minutes)
//                .withSecond(0);
//    }
//
//    /**
//     * 生成房间号（2-20层，01-30号房间）
//     */
//    private String generateRoomNumber() {
//        int floor = 2 + RANDOM.nextInt(19); // 2-20层
//        int room = 1 + RANDOM.nextInt(30);  // 1-30号房间
//        return String.format("%02d%02d", floor, room);
//    }
//
//    /**
//     * 生成随机姓名
//     */
//    private String generateRandomName() {
//        String[] familyNames = {"张", "王", "李", "赵", "刘", "陈", "杨", "黄", "周", "吴",
//                "徐", "孙", "朱", "马", "胡", "林", "郭", "何", "高", "罗"};
//        String[] givenNames = {"伟", "芳", "娜", "秀英", "敏", "静", "强", "磊", "军", "洋",
//                "刚", "勇", "艳", "杰", "涛", "明", "华", "平", "文", "辉"};
//        return familyNames[RANDOM.nextInt(familyNames.length)] +
//                givenNames[RANDOM.nextInt(givenNames.length)];
//    }
//
//    /**
//     * 生成随机手机号
//     */
//    private String generateRandomPhone() {
//        String[] prefixes = {"13", "14", "15", "16", "17", "18", "19"};
//        String prefix = prefixes[RANDOM.nextInt(prefixes.length)];
//        String suffix = String.valueOf(10000000 + RANDOM.nextInt(90000000)); // 8位随机数
//        return prefix + suffix;
//    }
//}
